#include <iostream>
#include <string>

using namespace std;

// void fn_pointer(int *count) {
//   // count 这里是一个指针，
//   *count = 10; // 取到指针的值进行修改
// }

// 放回值是一个指针，参数是一个指针
int* fn_pointer(int *count)
{
  // count 这里是一个指针，
  *count = 10; // 取到指针的值进行修改
  static int m = 20;   // 不支持放回局部变量的地址， 除非是一个 static 类型的变量
  return &m; // 放回一个指针
}

// 指针数组
char *fn_arr()
{
  // char 类型的数组需要添加结束字符 NULL 或者是 '\0'
  static char m[5] = {'2', '2', '2', '2', '\0'}; // 不支持放回局部变量的地址， 除非是一个 static 类型的变量
  return m;                                // 放回一个指针， 数组本来就是一个指针, 指向第一个元素的地址
}

string fn_string()
{
  static string str = "fuck you";
  return str;
}

int main(int argc, char const *argv[])
{
  int count = 20;
  int *ptr = fn_pointer(&count);

  char *char_list = fn_arr();

  string s = fn_string();

  cout << "count 的值为" << count << endl; // 10
  cout << "*ptr 的值为" << *ptr << endl;   // 10
  cout << "ptr 的值为" << ptr << endl;     // 10

  cout << "char_list 的值为" << char_list << endl; // '2222'

  cout << "s 的值为" << s << endl; // '2'

  // char 和 指针类型 不能比较， 会
  // if (n == &n) {
  //   cout << "n == &n" << endl; // '2',
  // }

  // char *tt = &n
  return 0;
}
